package com.shujia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *  上一个案例中我们是使用了java提供的DriverManager类去注册驱动的，但是呢，今后我们不一定只连接mysql，如果用第一种方式的话
 *  方法参数中的驱动类要改变，通常情况下，程序一旦开发完毕测试上线之后，非必要情况下，不会随意地改动代码，就意味着我们要将代码写的更加通用性。
 *  如果驱动包可以以路径字符串的形式参数传递进行注册的话，就会比上一个调用方法new对象要通用。
 *  所以采用第二种方式注册驱动，第二种方式采用了反射的机制获取驱动包中的驱动类，将驱动类加载到方法区中做初始化。
 *
 */
public class JDBCDemo2 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement state = null;
        try {
            //第二种注册驱动的方式
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接（表示JVM的进程和数据库进程之间的通道打开了，这属于进程之间的通信，使用完后记得关闭通道）。
            /**
             * public static Connection getConnection(String url, String user, String password)
             * url: 超文本传输协议
             *      jdbc:mysql://192.168.21.100:3306?useUnicode=true&characterEncoding=UTF-8
             * user: root
             * password: 123456
             */
            //mysql5.7+的版本不建议外部用户直接与mysql服务器直接连接
            String url = "jdbc:mysql://192.168.21.100:3306/bigdata27?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接成功："+conn);

            //3.获取数据库操作对象（专门执行sql语句的对象）
            //Statement createStatement() 创建一个 Statement对象，用于将SQL语句发送到数据库。
            state = conn.createStatement();

            //4.执行SQL语句（DQL,DML…）
            /**
             * Statement接口中有两个方法：
             * ResultSet executeQuery(String sql)  执行给定的SQL语句，该语句返回单个 ResultSet对象。  查询  另一大类操作
             * int executeUpdate(String sql)  执行给定的SQL语句，这可能是 INSERT ， UPDATE ，或 DELETE语句，或者不返回任何内容，如SQL DDL语句的SQL语句
             */
            String sql = "insert into goods values(1003,'百事可乐',3,'京东百事自营店')";
            int number = state.executeUpdate(sql); // 返回的是受影响的行数
            if(number==1){
                System.out.println("数据添加成功！！");
            }else {
                System.out.println("数据添加失败！！");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(state!=null){
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn!=null){
                try {
                    //关闭连接，释放资源
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
